home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 038a / aplibs91.zip / PUBVARS.BAS < prev    next >
BASIC Source File  |  1991-06-17  |  6KB  |  234 lines

  1.  
  2.  
  3. '           FIND ALL THE "EXTERNAL" VARIABLES IN YOUR UNIT FILES
  4.  
  5. '                  AND MAKE AN ALPHABETIZED LIST OF THEM,
  6.  
  7. '                        IN THE FORM "PUBLIC ...
  8. '                                     PUBLIC ... "
  9.  
  10. '                     TO "$INCLUDE" IN THE MAIN FILE
  11.  
  12.  
  13. '                                                  -- Howard Ballinger, 4-22-90
  14.  
  15. ' Soooo ... Just as soon as I'd uploaded the first version of this I said
  16. '           to my Self -- or my Self said to me -- Why not have it read the
  17. '           main program first and get its own unit filenames, instead of
  18. '           me having to type 'em in? This, then, is the Improved Version !!
  19.  
  20. '                                                                   -- 5-12-90
  21.                             $COMPILE EXE
  22.                            $ERROR ALL OFF
  23.                             $LIB ALL OFF
  24.                         $OPTION CNTLBREAK ON
  25.                              DEFINT A-Z
  26.  
  27.   %False = 0
  28.   %True = NOT %False
  29.  
  30.  DIM V$ (1:1000)
  31.  DIM UnitName$ (1:30)
  32.  
  33.  COLOR 14,0
  34.  CLS
  35.  LOCATE 2,1
  36.  PRINT "                   ╔════════════════════════════╗
  37.  PRINT "                   ║ HB PUBLIC VARIABLE LISTER  ║
  38.  PRINT "                   ╚════════════════════════════╝
  39.  PRINT
  40.  
  41.  COLOR 2,0
  42.  FILES "*.BAS"
  43.  
  44. GetFileName:
  45.  DO
  46.    COLOR 14,0
  47.    IF COMMAND$ <> "" THEN
  48.      MainFile$ = COMMAND$
  49.    ELSE
  50.      LOCATE 25,1
  51.      INPUT " MAIN FILE TO SEARCH FOR UNIT NAMES (CR to quit):"; MainFile$
  52.      LOCATE 25,1: PRINT SPACE$ (80);
  53.    END IF
  54.    IF MainFile$ = "" THEN END 1
  55.    MainFile$ = UCASE$ (MainFile$)
  56.    IF INSTR (MainFile$, ".") = 0 THEN MainFile$ = MainFile$ + ".BAS"
  57.    IF EXIST (MainFile$) THEN EXIT LOOP
  58.    LOCATE 20,26: PRINT "<<< ERROR OPENING FILE !! >>"
  59.    IF COMMAND$ <> "" THEN END 1
  60.    DELAY 3
  61.    LOCATE 20,26: PRINT "                            "
  62.  LOOP
  63.  
  64.  MainFile% = FREEFILE
  65.  OPEN MainFile$ FOR INPUT AS MainFile%
  66.  CLS
  67.  LOCATE 2,1
  68.  PRINT "                  ╔══════════════════════════════╗"
  69.  PRINT "                  ║  HB PUBLIC VARIABLE LISTER   ║"
  70.  PRINT "                  ╚══════════════════════════════╝"
  71.  PRINT
  72.  COLOR 29,0
  73.  L0 = CSRLIN: C0 = POS
  74.  PRINT "            Searching ";MainFile$; " ...": PRINT
  75.  COLOR 14,0
  76.  DO WHILE NOT EOF (MainFile%) '     search source file for units to be linked
  77.    LINE INPUT #MainFile%, W$
  78.    INCR Ln
  79.    W$ = LTRIM$ (W$, ANY CHR$ (32, 9)) '                   strip spaces & tabs
  80.    IF UCASE$ (LEFT$ (W$, 5)) = "$LINK" THEN
  81.      PRINT USING "           line  ####: \                         \"; Ln, W$
  82.      W$ = MID$ (W$, 6)
  83.      W$ = LTRIM$ (W$, ANY CHR$ (32, 34)) '            strip spaces & quotes
  84.      W$ = RTRIM$ (W$, ANY CHR$ (32, 34))
  85.      INCR File%
  86.      UnitName$ (File%) = EXTRACT$  (W$, ".") + ".BAS"
  87.    END IF
  88.  LOOP
  89.  L1 = CSRLIN: C1 = POS
  90.  LOCATE L0, C0
  91.  PRINT "            Searching ";MainFile$; " ...": PRINT
  92.  DELAY 1
  93.  LOCATE L0, 40
  94.  PRINT "done."
  95.  CLOSE #MainFile%
  96.  DELAY 1
  97.  
  98.  OutFile$ = EXTRACT$ (MainFile$, ".") + ".PV"
  99.  BakFile$ = EXTRACT$ (MainFile$, ".") + ".&PV"
  100.  
  101.  IF EXIST (BakFile$) THEN
  102.    L0 = CSRLIN: C0 = POS
  103.    LOCATE 22,1
  104.    PRINT " THERE'S A FILE NAMED ";BakFile$;" IN THIS DIRECTORY."
  105.    PRINT " PRESUMABLY IT'S AN OLD BACKUP PUBVARS LIST. OVERWRITE IT ? (y/n) ";
  106.    DO: K$ = UCASE$ (INKEY$): LOOP UNTIL K$ = "Y" OR  K$ = "N" OR K$ = CHR$ (27)
  107.    PRINT K$
  108.    IF K$ = "Y" THEN
  109.      KILL BakFile$
  110.      FOR L = 18 TO 25: LOCATE L, 1: PRINT SPACE$ (80);: NEXT
  111.      LOCATE 20, 5
  112.      PRINT BakFile$; " Deleted "
  113.    ELSE
  114.      PRINT
  115.      PRINT "TO PRESERVE THE FILE ";BakFile$;" PLEASE RENAME IT, THEN START OVER"
  116.      END 1
  117.    END IF
  118.  END IF
  119.  
  120.  PRINT
  121.  IF EXIST (OutFile$) THEN
  122.    LOCATE 21, 5
  123.    PRINT "Renaming "; OutFile$; " as ";  BakFile$
  124.    NAME OutFile$ AS BakFile$
  125.  END IF
  126.  
  127.  File% = 0
  128.  DO
  129.    INCR File%
  130.    InputFile$ = UnitName$ (File%)
  131.    IF InputFile$ = "" THEN
  132.      IF V$ (1) <> "" THEN
  133.        LOCATE 23,46: PRINT "WRITING TO FILE "; OutFile$;
  134.        OutputFile% = FREEFILE
  135.        OPEN OutFile$ FOR APPEND AS OutputFile%
  136.        Ind = 1
  137.        DO
  138.          PRINT #OutputFile, V$ (Ind)
  139.          INCR Ind
  140.        LOOP UNTIL V$ (Ind) = ""
  141.      END IF
  142.      COLOR 3,0
  143.      LOCATE 24,1: PRINT SPACE$ (80);
  144.      LOCATE 25,1: PRINT SPACE$ (80);
  145.      LOCATE 22,1
  146.      END
  147.    END IF
  148.  
  149.    ARRAY SCAN V$ (), = "", TO FirstBlank
  150.    Ind = FirstBlank  '                because this array doesn't start w/ 0
  151.  
  152.    InputFile$ = UCASE$ (InputFile$)
  153.    InputFile% = FREEFILE
  154.    OPEN InputFile$ FOR INPUT AS InputFile%
  155.    GOSUB Status
  156.    V$ (Ind) = "'   UNIT FILE SEARCHED: " + InputFile$
  157.    INCR Ind
  158.  
  159.    Ln = 0
  160.    DO WHILE NOT EOF (InputFile%)
  161.      LINE INPUT #InputFile%, W$
  162.      INCR Ln
  163.      GOSUB Status
  164.      W$ = LTRIM$ (W$, ANY CHR$(9, 32)) '             again remove spaces & tabs
  165.      IF UCASE$ (LEFT$ (W$, 8)) = "EXTERNAL" THEN
  166.        W$ = MID$ (W$,9)
  167.        DO '                          chop off each variable name (up to comma)
  168.          W$ = LTRIM$ (W$)
  169.          Comma = INSTR (W$, ",")
  170.          IF Comma THEN
  171.            V$ (Ind) = "PUBLIC " + LEFT$ (W$, Comma-1)
  172.            W$ = MID$ (W$, Comma+1)
  173.          ELSE
  174.            V$ (Ind) = "PUBLIC " + W$
  175.          END IF
  176.        INCR Ind
  177.        INCR Vars%
  178.        GOSUB Status
  179.        LOOP WHILE Comma
  180.      END IF
  181.    LOOP
  182.    CLOSE InputFile%
  183.    ARRAY SORT V$ () FOR Ind - 1, COLLATE UCASE
  184.    Ind = 1
  185.    DO UNTIL V$ (Ind) = ""
  186.      IF V$ (Ind) = V$ (Ind + 1) THEN
  187.        INCR Dups%
  188.        DECR Vars%
  189.        ARRAY DELETE V$ (Ind)
  190.        GOSUB Status
  191.      END IF
  192.      INCR Ind
  193.    LOOP
  194.    N$ = "NEXT "
  195.  LOOP
  196.  
  197.  
  198.  
  199. Status:
  200.  COLOR 14,4
  201.  LOCATE 24,1
  202.  PRINT USING "       Searching: \          \        Line: ####                                "  ; InputFile$, Ln;
  203.  LOCATE 25,1
  204.  PRINT USING_
  205. "           EXTERNAL Vars Found: ###              Duplicates Removed: ###        ";_
  206.                                          Vars%, Dups%;
  207.  RETURN
  208.  
  209.  
  210.  
  211. FUNCTION EXIST (F$)
  212.  
  213.   %FLAGS = 0:  %AX = 1:  %BX = 2:  %CX = 3:  %DX = 4
  214.      %SI = 5:  %DI = 6:  %BP = 7:  %DS = 8:  %ES = 9
  215.  
  216.  LOCAL SearchErr, FZ$
  217.  
  218.  FZ$ = F$ + CHR$(0)
  219.  REG %DS, STRSEG (FZ$)
  220.  REG %DX, STRPTR (FZ$)
  221.  REG %CX, &H17
  222.  REG %AX, &H4E00
  223.  CALL INTERRUPT &H21
  224.  SearchErr = REG(%AX)
  225.  SELECT CASE SearchErr
  226.    CASE 2, 3, 15, 18
  227.      EXIST = 0
  228.    CASE ELSE
  229.      EXIST = -1
  230.  END SELECT
  231.  DEF SEG
  232.  END Function
  233.  
  234.